//使用泛型实现一个求最大值的方法
class Alg<T extends Comparable<T>> {
    public T findMaxVal(T[] array) {
        T max = array[0];
        for(int i = 0;i < array.length;i++) {
            if(array[i].compareTo(max) > 0) {
                max = array[i];
            }
        }
        return max;
    }
}
//泛型方法
class Alg2 {
    public<T extends Comparable<T>> T findMaxVal(T[] array) {
        T max = array[0];
        for(int i = 0;i < array.length;i++) {
            if(array[i].compareTo(max) > 0) {
                max = array[i];
            }
        }
        return max;
    }
}
class Alg3 {
    public static<T extends Comparable<T>> T findMaxVal(T[] array) {
        T max = array[0];
        for(int i = 0;i < array.length;i++) {
            if(array[i].compareTo(max) > 0) {
                max = array[i];
            }
        }
        return max;
    }
}
public class Test {
    public static void main(String[] args) {
        Alg3 alg3 = new Alg3();
        Integer[] array = {1,3,5,6,8,2,0};
        System.out.println(Alg3.findMaxVal(array));;
    }
    public static void main2(String[] args) {
        //泛型方法
        Alg2 alg2 = new Alg2();
        Integer[] array = {1,3,5,6,8,2,0};
        System.out.println(alg2.findMaxVal(array));;
    }
    public static void main1(String[] args) {
        //泛型的上界:取决于继承了那一个类型,继承了某个类型的情况下
        //使用该类的类型只能是继承类型或继承类型的子类
//        泛型类
        Alg<Integer> alg = new Alg<Integer>();
        Integer[] array = {1,3,5,6,8,2,0};
        System.out.println(alg.findMaxVal(array));
    }
}
